package com.itheima.listener;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/*
    统计的是在线人数    session对象代表在线人数
       所以我们要监听session对象的创建和销毁
       我们要实现 HttpSessionListener
 */
@WebListener
public class CountOnlinePeople implements HttpSessionListener {
    /**
     * 每当有一个session对象产生 就执行一次
     * @param httpSessionEvent
     */
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("有人上线了");
        //session对象产生就是上线了  人数+1
        //从servletContext域中找到 count 计数变量
        //获取 servletContext对象
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        //获取计数变量
       Integer count =  (Integer)servletContext.getAttribute("count");
       // 当count==null时  说明还没开始计数
        if(count==null){
            count=1;
            servletContext.setAttribute("count",count);
        }else{
            count++;
            servletContext.setAttribute("count",count);
        }
        System.out.println("在线人数+1,当前在线人数是:"+count);
    }

    /**
     * 每当有一个session对象销毁 就执行一次
     * @param httpSessionEvent
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("有人下线了。。。。");
        //从servletContext域中找到 count 计数变量
        //获取 servletContext对象
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        //获取计数变量
        Integer count =  (Integer)servletContext.getAttribute("count");

        count--;//下线
        servletContext.setAttribute("count",count);

        System.out.println("在线人数-1,当前在线人数是:"+count);
    }
}
